Technical Q&A QA1348
Sequence Grabber - Using the SGDataProc for Sound

QF Œ»ÝASGDataProcSample ‚ðŽg‚Á‚Äì‹Æ‚µ‚Ä‚¢‚Ü‚·BVideo SGChannel ‚ŃTƒ“ƒvƒ‹‚ðƒLƒƒƒvƒ`ƒƒ‚·‚é‚̂Ɠ¯‚¶Žè–@‚ð Sound SGChannel ‚ÅŽg‚Á‚ăI[ƒfƒBƒI‚ðˆ—‚Å‚«‚é‚©‚Ç‚¤‚©‹³‚¦‚Ä‚­‚¾‚³‚¢B

AF ‚Í‚¢A‚à‚¿‚ë‚ñ‚Å‚«‚Ü‚·BƒrƒfƒI‚ƃTƒEƒ“ƒh‚ðƒLƒƒƒvƒ`ƒƒ‚·‚éÛASGDataProc ‚É“n‚³‚ê‚é SGChannel ƒpƒ‰ƒ[ƒ^‚́AVideo SGChannel ‚Ü‚½‚Í Sound SGChannel ‚̂ǂ¿‚ç‚©‚ɂȂè‚Ü‚·B‚±‚ê‚ç‚̂ǂ¿‚炪“n‚³‚ꂽ‚©‚𖈉ñƒR[ƒ‹ƒoƒbƒN‚ð’Ê‚¶‚ă`ƒFƒbƒN‚µA‚»‚ê‚ɉž‚¶‚Đæ‚֐i‚Þ‚±‚Æ‚ª‚Å‚«‚Ü‚·B

SGDataProc ƒR[ƒ‹ƒoƒbƒN‚ð“o˜^‚·‚邯Aƒoƒbƒtƒ@‚ªƒfƒBƒXƒN‚ɏ‘‚«ž‚Ü‚ê‚邯“¯Žž‚É“n‚³‚ê‚Ü‚·BƒfƒtƒHƒ‹ƒg‚ł́ASound SGChannel (SoundMediaType) ‚̓I[ƒfƒBƒIƒf[ƒ^‚ð–ñ 1 •bŠÔŠu‚Å“à•”“I‚Ƀoƒbƒtƒ@ƒŠƒ“ƒO‚µ‚Ü‚·B‚‚܂èAƒI[ƒfƒBƒIƒf[ƒ^‚̏ꍇ‚́ASGDataProc ‚ª–ñ 1 •b‚É 1 ‰ñŒÄ‚яo‚³‚ê‚邯‚¢‚¤‚±‚Ƃł·B‚±‚Ì“®ì‚ð•ύX‚·‚é‚ɂ́ASGSetSoundRecordChunkSize ‚ðŒÄ‚яo‚µ‚āAƒ`ƒƒƒ“ƒN“–‚½‚è‚Ì•b”ƒpƒ‰ƒ[ƒ^‚ð•K—v‚ɉž‚¶‚č‚‚¢’l‚â’á‚¢’l‚ɐݒ肵‚Ü‚·B

‚Ü‚½ASGDataProc ‚É“n‚· writeType ƒpƒ‰ƒ[ƒ^‚à”Fޝ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BVideo SGChannel ‚ðˆµ‚¤ê‡AwriteType ƒpƒ‰ƒ[ƒ^‚Í•K‚¸ seqGrabWriteAppend ‚Æ“¯‚¶‚ɂȂè‚Ü‚·B‚µ‚©‚µAƒTƒEƒ“ƒh‚̏ꍇ‚͈قȂè‚Ü‚·BSound SGChannel ‚́AVideo SGChannel ‚Ƃ̓f[ƒ^‚̏‘‚«ž‚Ý‚ªˆÙ‚È‚èA‚Ü‚¸ƒuƒƒbƒN‚ð—\–ñ‚µAŽŸ‚Ì SGIdle ŒÄ‚яo‚µŽž‚ɃuƒƒbƒN‚ð‘‚«ž‚݂܂·B‚‚܂èAwriteType ‚ª seqGrabWriteReserve ‚Æ“¯‚¶ê‡ASGDataProc ‚É“n‚³‚ê‚éƒ|ƒCƒ“ƒ^ (Ptr p) ‚ª–³Ž‹‚³‚ê‚邽‚߁A‰½‚à‚¹‚¸‚ɖ߂邱‚Ƃł«‚Ü‚·BwriteType ‚ª seqGrabWriteFill ‚Æ“¯‚¶‚Å‚ ‚ê‚΁Aƒf[ƒ^‚ðˆ—‚Å‚«‚Ü‚·B

’ˆÓF
SGSetSoundRecordChunkSize ‚́uƒ`ƒƒƒ“ƒN‚ ‚½‚è‚Ì•b”v‚Æ‚µ‚Ä long ‚ðŽæ‚è‚Ü‚·B1 •b‚æ‚è’Z‚¢ŠúŠÔ‚Ń`ƒƒƒ“ƒN‚ð‹L˜^‚µ‚½‚¢ê‡‚́AiSInt32 ‚ł͂Ȃ­j•‰‚Ì FixediŒÅ’èj¬”“_’l‚Å“n‚·•K—v‚ª‚ ‚è‚Ü‚·B‚½‚Æ‚¦‚΁A0.5 •b‚̃`ƒƒƒ“ƒN‚É‚µ‚½‚¢ê‡‚́A0xFFFF8000iFixed ¬”“_’l‚Ì -0.5j‚ð“n‚µ‚Ü‚·B

Sound SGChannel ‚ª Sound Manager ‚ðŽg‚Á‚ăI[ƒfƒBƒIƒf[ƒ^‚ðŽæ“¾‚·‚邯A‚»‚̃f[ƒ^‚Í•K‚¸ASGSettingsDialog ‚È‚Ç‚Ì API ‚ðŽg‚Á‚Ä‘I‘ð‚³‚ê‚½Œ`Ž®‚ŁAƒCƒ“ƒ^[ƒŠ[ƒu‚³‚ꂽƒoƒbƒtƒ@‚É’ñ‹Ÿ‚³‚ê‚邱‚Æ‚ðŠo‚¦‚Ä‚¨‚¢‚Ä‚­‚¾‚³‚¢BƒfƒtƒHƒ‹ƒg‚ÌŒ`Ž®‚́A16 ƒrƒbƒg‚Ì 2 ‚̕␔i'twos' - ‰º‹L‚Ì’‚ðŽQÆj‚ŁA"NONE" ˆ³kƒ^ƒCƒv‚É‚æ‚Á‚ÄŽw’肳‚ê‚Ü‚·B32 ƒrƒbƒg‚Ì•‚“®¬”“_”‚Ü‚½‚Í 24 ƒrƒbƒg‚̐®”‚ȂǁA‘¼‚ÌŒ`Ž®‚ð‘I‘ð‚µ‚½ê‡ADataProc ‚É’ñ‹Ÿ‚³‚ê‚éƒf[ƒ^‚͈قȂè‚Ü‚·BQDesign ‚Ȃǂ̈³kŒ`Ž®‚ð‘I‘ð‚µ‚½ê‡Aƒf[ƒ^‚Í‚·‚łɃpƒPƒbƒg‚Ɉ³k‚³‚ê‚Ä‚¢‚Ü‚·B

¶‰E‚̃`ƒƒƒ“ƒlƒ‹‚ɕʁX‚ɃAƒNƒZƒX‚µ‚½‚èAƒf[ƒ^‚ð‰½‚ç‚©‚Ì AudioUnit ‚É“n‚µ‚½‚è‚·‚邱‚Ƃɂæ‚Á‚ăf[ƒ^‚ð–Ê”’‚¢•û–@‚ŏˆ—‚µ‚½‚¢ê‡‚́A•K‚¸ƒf[ƒ^‚ðƒCƒ“ƒ^[ƒŠ[ƒu‰ðœ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚́AAudioConverteriAudioConverter.h ‚ðŽQÆj‚ðŽg‚Á‚čs‚¦‚Ü‚·B‚±‚̏ꍇ‚́AƒfƒtƒHƒ‹ƒg‚Ì 'twos' Œ`Ž®‚ðŽg‚Á‚Ä Sound SGChannel ‚©‚çƒOƒ‰ƒu‚µA‚»‚ÌŒã‚ňê“x‚¾‚¯•ÏŠ·‚ðŽÀs‚·‚é‚Ù‚¤‚ªŒ«–¾‚Å‚·B‚±‚ê‚ðŽÀs‚·‚é‚ɂ́A’Pˆê‚Ì AudioConverter ‚ðŽg—p‚µ‚āA16ƒrƒbƒg•„†•t‚«®”ƒCƒ“ƒ^[ƒŠ[ƒuŒ`Ž®‚©‚çACore Audio ‚É‚æ‚鏈—‚ª‰Â”\‚È 32 ƒrƒbƒg•‚“®¬”“_””ñƒfƒCƒ“ƒ^[ƒŠ[ƒuŒ`Ž®‚ɕϊ·‚µ‚Ü‚·B

‘Oq‚̂悤‚ɁAseconds ƒpƒ‰ƒ[ƒ^‚ð’á‚¢’l‚ɐݒ肷‚邱‚ƂŁASGSetSoundRecordChunkSize ‚ðŽg‚Á‚đ҂¿ŽžŠÔ‚ð’Zk‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚̏ꍇASGDataProc ‚ɂ́A‚æ‚菬‚³‚ȃ`ƒƒƒ“ƒN‚̃I[ƒfƒBƒIƒf[ƒ^‚ªA‚æ‚è•p”ɂɓn‚³‚ê‚邱‚ƂɂȂè‚Ü‚·B

’ˆÓF
ƒfƒtƒHƒ‹ƒg‚̃Lƒƒƒvƒ`ƒƒŒ`Ž®‚Í 16 ƒrƒbƒg‚Ì 2 ‚̕␔‚ŁAƒTƒ“ƒvƒ‹‚͍ŏ¬’l 0x8000 (-32768) ‚©‚ç Å‘å’l 0x7fff (32767) ‚͈̔͂ł·B


ŽQlŽ‘—¿F


m2004 ”N 4 ŒŽ 6 “ún